package com.bristua.barcode.common.util;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author hrt
 * @date 2018年1月4日
 * @description 日期工具类
 */
public class DateUtils {
//
//    public static final SimpleDateFormat ALL_DATETIME_FORMAT = new SimpleDateFormat("yyyyMMddHHmmsssss");
//    public static final SimpleDateFormat SHOW_DATETIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//    public static final SimpleDateFormat SIMPLE_DATETIME_FORMAT = new SimpleDateFormat("yyMMddHHmmsssss");
//    public static final SimpleDateFormat DATETIME_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
//    public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
//    public static final SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HHmmss");

    /**
     * 获取当前时间
     * 格式：yyyyMMddHHmmss
     *
     * @return
     */
    public static String getDateTime() {
        SimpleDateFormat DATETIME_FORMAT = new SimpleDateFormat("yyyyMMddHHmmss");
        return DATETIME_FORMAT.format(new Date());
    }

    /**
     * 获取当前时间
     * 格式：HHmmss
     *
     * @return
     */
    public static String getTime() {
        SimpleDateFormat TIME_FORMAT = new SimpleDateFormat("HHmmss");
        return TIME_FORMAT.format(new Date());
    }

    /**
     * 获取当前时间
     * 格式：yyyy-MM-dd HH:mm:ss sss
     *
     * @return
     */
    public static String getShowDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return simpleDateFormat.format(new Date());
    }

    /**
     * 获取当前日期
     * 格式：yyyyMMdd
     *
     * @return
     */
    public static String getDate() {
        SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
        return DATE_FORMAT.format(new Date());
    }

    /**
     * 获取时间戳
     *
     * @return
     */
    public static String getTimeStamp() {
        return String.valueOf(new Date().getTime());
    }

    /**
     * 获取昨天格式为：yyyyMMdd
     *
     * @return
     */
    public static String getYesterDate() {
        Calendar cal = Calendar.getInstance();
        cal.set(Calendar.DAY_OF_MONTH, cal.get(Calendar.DAY_OF_MONTH) - 1);
        SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
        return DATE_FORMAT.format(cal.getTime());
    }

    /**
     * yyyyMMdd转换为yyyy年MM月dd日
     *
     * @param date
     * @return
     */
    public static String convertDate(String date) {

        SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日");
        try {
            return sf.format(sf.parse(date));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * yyyyMMddHHmmss转换为yyyy-MM-dd HH:mm:ss
     *
     * @param datetime
     * @return
     */
    public static String convertDateTime(String datetime) {

        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            return sf.format(sf.parse(datetime));
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Date parse(String dateStr) {

        try {
            DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }


    /**
     * 转换时间戳
     *
     * @param dateStr
     * @param pattern
     * @return
     */
    public static Date parse(String dateStr, String pattern) {

        try {
            DateFormat format = new SimpleDateFormat(pattern);
            return format.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 获取时间所对应的毫秒
     *
     * @param datetime String 时间字符串
     * @param inFmt    String 时间格式化串
     * @return long 毫秒数
     * @throws ParseException
     */
    public static long getTimeValue(String datetime, String inFmt) throws ParseException {
        return parse(datetime, inFmt).getTime();
    }

    /**
     * 获取当前时间 毫秒值
     * <p>
     * 年月、月份、日期、小时、分钟、秒、毫秒
     *
     * @return
     */
    public static Long getAtPresentTime() {
        Long millis = System.currentTimeMillis();
        return millis;
    }
}
